/*
 * ModLed.c
 *
 * Created: 23/03/2012 14:03:56
 *  Author: marionse
 * \brief permet de gerer les led du system
 */ 

#include "ModLed.h"
#include "AppDesc.h"
#include "ModSysTimer.h"


/**
* \brief FONCTION PRIVEE DU MODULE
*/


/**
* \brief VARIABLES PRIVEE DU MODULE
*/
static struct  
{
	Boolean hb_led_state;
	TSysTime last_sys_timer_value;
}mod_led;


/**
* \brief fonction d'initialisation du module
*/
ERetCode ModLedInit( void )
{
	ERetCode lo_ret_code = E_RET_SUCCESS;
	
	/** Gestion d'une led de vie si elle est definie */
	#ifdef HEARTBEAT_LED_DDR
		// allume la led
		ModLedSetOn( HEARTBEAT );
//		HEARTBEAT_LED_PORT &= ~(HEARTBEAT_LED_MASK);
//		HEARTBEAT_LED_DDR |= HEARTBEAT_LED_MASK;
		mod_led.hb_led_state = TRUE;
		mod_led.last_sys_timer_value = SysTimerGetValue();
	#endif // HEARTBEAT_LED_DDR
	
	
	return lo_ret_code;
}

/**
* \brief fonction appelee a chaque passage dans la boucle main
*/
ERetCode ModLedTick( void )
{
	ERetCode lo_ret_code = E_RET_SUCCESS;
	
	#ifdef HEARTBEAT_LED_DDR
	{
		// toggle la led toute les secondes
		TSysTime l_value = SysTimerGetValue();
		if( ((TSysTime)(l_value-mod_led.last_sys_timer_value)) > 1000 )
		{
			if( TRUE == mod_led.hb_led_state )
			{
				// on eteint la led
				ModLedSetOff( HEARTBEAT );
				mod_led.hb_led_state = FALSE;
			}
			else
			{
				// on allume la led
				ModLedSetOn( HEARTBEAT );
				mod_led.hb_led_state = TRUE;
			}
			mod_led.last_sys_timer_value = l_value;
		}
	}		
	#endif // HEARTBEAT_LED_DDR
	
	return lo_ret_code;
}
							 
							 
							 